package v1

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"log"
	"net/http"
	"perfect-admin/dao"
	"perfect-admin/model"
	"perfect-admin/model/request"
	"perfect-admin/service"
	"strconv"
)

func UploadAvatarImg(c *gin.Context) {
	user_id, ok := c.GetPostForm("user_id")
	file, err := c.FormFile("img")
	if ok && err == nil {
		filepath := "static/upload/avatar/"+ user_id + ".png"
		if err := c.SaveUploadedFile(file, filepath); err != nil {
			c.JSON(201, gin.H{"msg": err, "img_path": nil})
			return
		}else{
			// 更新用户头像数据
			avatar_url := "/"+ filepath
			err := dao.DB.Model(&model.SysUser{}).Where("id = ?", user_id).Update("avatar_url", avatar_url).Error
			if err != nil {
				c.JSON(202, gin.H{"msg": err, "img_path": nil})
			}else {
				c.JSON(http.StatusOK, gin.H{"msg": nil, "img_path": avatar_url})
			}
			return
		}
	}else{
		c.JSON(203, gin.H{"msg": err, "img_path": nil})
	}
	return
}

func ResetPwd(c *gin.Context)  {
	var pwd_form request.UserForm
	if err := c.ShouldBindJSON(&pwd_form); err!= nil {
		c.JSON(201, gin.H{"msg": "接收数据错误"})
		return
	}
	err1 := service.ResetPassword(pwd_form)
	if err1 != nil {
		c.JSON(203, gin.H{"msg": err1})
	}else {
		c.JSON(http.StatusOK, gin.H{"msg": "重置密码成功"})
	}
	return
}

func GetUserList(c *gin.Context)  {
	var queryInfo request.QueryInfo
	if err := c.ShouldBindQuery(&queryInfo); err!=nil{
		c.JSON(201, gin.H{"msg": err, "data": nil})
		return
	}
	users, total, err := service.GetUserInfoList(queryInfo)
	if err != nil {
		c.JSON(202, gin.H{"msg": err, "data": nil})
	}else {
		c.JSON(http.StatusOK, gin.H{"msg": "获取用户列表成功", "data": map[string]interface{}{
			"users":users,
			"total": total,
		}})
	}
	return
}

func ChangeState(c *gin.Context){
	var user request.StateForm
	err := c.BindJSON(&user)
	if err != nil {
		c.JSON(201, gin.H{"msg": err, "data": nil})
		return
	}
	err = service.ChangeUserState(user)
	if err != nil {
		c.JSON(202, gin.H{"msg": err, "data": nil})
	}else {
		c.JSON(http.StatusOK, gin.H{"msg": "获取用户列表成功", "data": nil})
	}
	return
}

func UpdateUserRole(c *gin.Context)  {
	var user request.UserRoleForm
	err := c.ShouldBind(&user)
	if err != nil {
		c.JSON(201, gin.H{"msg": err, "data": nil})
		return
	}
	err = service.UpdateUserRole(user)
	if err != nil {
		fmt.Println(err)
		c.JSON(202, gin.H{"msg": err, "data": nil})
	}else {
		c.JSON(http.StatusOK, gin.H{"msg": "更新用户角色成功", "data": nil})
	}
	return
}

func AddOneUser(c *gin.Context)  {
	var user model.SysUser
	err := c.BindJSON(&user)
	if err != nil {
		c.JSON(201, gin.H{"msg": err, "data": nil})
		return
	}
	err = service.AddOneUser(user)
	if err != nil {
		c.JSON(202, gin.H{"msg": err, "data": nil})
	}else {
		c.JSON(http.StatusOK, gin.H{"msg": "添加用户成功", "data": nil})
	}
	return
}

func UpdateUser(c *gin.Context)  {
	var user model.SysUser
	err := c.BindJSON(&user)
	if err != nil {
		c.JSON(201, gin.H{"msg": err, "data": nil})
		return
	}
	err = service.UpdateUser(user)
	if err != nil {
		c.JSON(202, gin.H{"msg": err, "data": nil})
	}else {
		c.JSON(http.StatusOK, gin.H{"msg": "修改用户成功", "data": nil})
	}
	return
}

func DeleteUser(c *gin.Context) {
	id, ok := c.GetQuery("id")
	Id, err := strconv.Atoi(id)
	if !ok || err != nil {
		log.Println(err)
		c.JSON(201, gin.H{"msg": "参数获取失败"})
		return
	}
	err = service.DeleteUser(Id)
	if err != nil {
		c.JSON(201, gin.H{"msg": err, "data": nil})
	} else {
		c.JSON(http.StatusOK, gin.H{"msg": "删除用户成功", "data": nil})
	}
	return
}